# @Filename:    装饰器
# @Author:      王佳伟
# @Time:        2025-02-07 11:49
# @Describe:

'''
def yyy(fun):
	def zzz(*a,**b):
		fun(*a,**b)
	return zzz
@yyy
def xxx(n):
	pass
'''

'''
这个很重要所以才放的最后
Python的装饰器（Decorator）是一种特殊的函数，它可以接受一个函数作为输入，并返回一个新的函数作为输出。它可以在不改变原函数代码的情况下，增加一些额外的功能，例如计时、记录日志、缓存结果等，特别是很多函数都要加的一些辅助函数。
装饰器可以使代码更加简洁和可维护，因为它们可以让开发者把代码的不同部分分开，使得代码更加模块化。例如，如果我们有多个函数需要进行某种操作，我们可以使用装饰器来把这个操作抽象出来，并应用于这些函数。
'''

def my_decorator(func):
    def wrapper():
        print("Before the function is called")
        func()
        print("After the function is called")
    return wrapper

@my_decorator
def say_hello():
    print("Hello World!")

say_hello()

print("--------------------------------")

'''
装饰器的应用非常广泛，它们可以用于缓存结果、检查参数、验证身份、重试操作、限制频率等等。因为它们可以让我们在不改变原函数代码的情况下增加额外的功能，所以它们是Python 编程中的一个非常重要的概念。
'''

import time
# 记时间函数
def time_f(fuc):
    def time_f2(a):
        s = time.time()
        r = fuc(a)
        e = time.time()
        print(e - s, r)
    return time_f2

@time_f
def back_main(n):
    def back(n):
        if n == 1 or n == 0:
            return 1;
        elif n == 2:
            return 2
        return back(n - 1) + back(n - 2)
    r = back(n)
    return r

@time_f
def dp_f(n):
    dp = [0, 1, 2]
    for i in range(3, n + 1):
        dp.append(dp[i - 1] + dp[i - 2])
    return dp[n]

back_main(40)   # 递归算法
dp_f(40)    # 动态规划

print("--------------------------------")